<?php 
/**
 * Класс для работы с базой данных с библиотекой PDO
 * @author Бикмуллин Иван Олегович
 * @version 1.0
 */
class mysqldb 
{
	//ссылка на подключение к базе
	var $link;
	
	/**
	 * конструктор класса, выполняет подключение и выбор базы данных
	 * @param string $sql_server адрес севрера mysql
	 * @param string $sql_user username
	 * @param string $sql_password password
	 */
	function __construct($sql_server, $sql_user, $sql_password, $sql_db)
	{
		//подключение к базе данных
		$this->link=mysql_connect($sql_server, $sql_user, $sql_password);
		//если не удалось подключить, вывести соотв. ошибку
		if(!$this->link) die("Can't connect to the server");
		//в случае успешного подключения выбрать базу данных
		else
			//в случае неудачи выбора базы вывести соответствующую ошибку
			if (!$base=mysql_select_db($sql_db ,$this->link)) die("Can't select db");
	}
	/**
	 * get_messages
	 * Функция получения сообщений из базы
	 * 
	 */
	function get_messages()
	{
	    //инициализируем массив для сообщений
	    $messages = array();
	    //выполняем запрос к базе на получение всех сообщений
		$allmessages = mysql_query("SELECT * from messages ORDER BY actual_date DESC") or die(mysql_error());
		//если результат не пустой
		if(!empty($allmessages))
		{
		    //записываем в ассоциативный массив сообщения
		    for ($i=0; $i<mysql_num_rows($allmessages); $i++)
		    {
			    $messages[] = mysql_fetch_assoc($allmessages);
		    }
		    //возвращаем ассоциативный массив с сообщениями
		    return $messages;
		}
		else return false;
	}
	
	/**
	 * get_comments
	 * функция получения комментариев
	 * @param int $id идентификатор сообщения, комментарии которого нужно получить
	 *
	 */
	function get_comments($id)
	{
	    //инициализируем массив для комментариев
	    $comments = array();
	    //выполняем запрос на поулчение комментариев с полученным id сообщения 
		$query = "SELECT * FROM `guestbook`.`comments` where message_id='".$id."' ORDER BY comment_date ";
		$result = mysql_query($query,$this->link);
		//результат НЕ логического типа, то комментарии есть 
		if(!is_bool($result))
		{
		    //запись всех комментариев в ассоциативный массив
		    for ($i=0; $i<mysql_num_rows($result); $i++)
		    {
		        $comments[] =  mysql_fetch_assoc($result);
		    }
		    //возвращаем ассоциативный массив с комментариями
		    return $comments;
		}
		//если результат логического типа, комментариев нет
		else return false;
	}
	/**
	 * get_message
	 * функция получения сообщения
	 * @param string $tbl_name имя таблицы, из которой нужно выбрать пост
	 * @param int $id идентификатор сообщения или комментария
	 * 
	 */
	function get_message($tbl_name, $id)
	{
	    //выполняем запрос на получение сообщения или коммента с id полученным при вызове
	    $result=mysql_query("SELECT * FROM ".$tbl_name." WHERE id='".$id."'",$this->link) or die(mysql_error());
	    //возвращаем ассоциативный массив с сообещнием
	    return mysql_fetch_assoc($result);
	}
	/**
	 * edit
	 * функция редактирования сообщения или коммента
	 * @param string $tbl_name имя таблицы, из которой нужно выбрать пост
	 * @param int $id идентификатор сообщения или комментария
	 * @param string $text текст сообщения
	 * 
	 */
	function edit($tbl_name, $id, $text)
	{
	    //безопасность строки
	    $text = addslashes($text);
	    //формирование текста запроса
	    $query = "UPDATE ".$tbl_name." SET text='".$text."' WHERE id='".$id."'";
	    //выполнение запроса
	    $result = mysql_query($query,$this->link) or die(mysql_error());
	    return true;
	}
	/**
	 * add_message
	 * Функция, обрабатывающая добавление сообщения в базу данных
	 * @param string $text текст сообщения
	*/
	function add_message($text)
	{
	    //безопасность строки
	    $text = addslashes($text);
	    //получение момента вызова функции
	    $date = date("Y-m-d H-i-s");
	    //формирование текста запроса
	    $query = "INSERT INTO guestbook.messages (id,text,message_date,actual_date)
	                    VALUES (NULL,'".$text."','".$date."','".$date."')";
	    //выполнение запроса
	    //в случае провала выдать сообщение об ошибке
	    $result = mysql_query($query, $this->link) or die(mysql_error($this->link));
	    return true;
	}
	/**
	 * add_comment
	 * Функция, обрабатывающая добавления комментария к сообщению
	 * @param string $text текст комментария
	 * @param int $id идентификатор комментируемого сообщения
	 */
	function add_comment($text, $id)
	{
	    //безопасность строки
	    $text = addslashes($text);
	    //получение момента вызова функции
	    $date = date("Y-m-d H-i-s");
	    //формирование текста запроса на добавление комментария
	    $query = "INSERT INTO `guestbook`.`comments`(`message_id`, `id`, `text`, `comment_date`)
	    VALUES ('".$id."',NULL,'".$text."','".$date."')";
	    //выполнение запроса
	    $result = mysql_query($query,$this->link) or die(mysql_error());
	    //формирование текста запроса на обновление информации об актуальной дате сообщения для правильной сортировки
	    $query = "UPDATE messages SET actual_date='".$date."' WHERE id='".$id."'";
	    //выполнение запроса
	    $result = mysql_query($query,$this->link) or die(mysql_error());
	    return true;
	}
	/**
	 * delete
	 * Функция, обрабатывающая удаление записи из базы данных
	 * @param string $tbl_name имя таблицы из которой следует удалить запись
	 * @param int $id идентификатор сообщения или комментария который следует удалить
	 */
	function delete($tbl_name, $id)
	{
	    //выбор действий в зависимости от таблицы из которой следует удалять
	    switch($tbl_name)
	    {
	    	//В случае удаления сообщения, так же следует удалить и все комментарии к нему
	    	case "messages":
	    		//формаирование текста запроса на удаление сообщения
	    		$query = "DELETE FROM messages WHERE id='".$id."'";
	    		//выполнение запроса
	    		mysql_query($query,$this->link);
	    		//формирование текста запроса на удаление всех комментариев к данному сообщению
	    		$query="DELETE FROM comments WHERE message_id='".$id."'";
	    		//выполнение запроса
	    		mysql_query($query,$this->link);
	    	break;
	    		//В случае удаления комментария, удаляем только сам комментарий
	    	case "comments":
	    		//формирование текста запроса на удаление комментария
	    		$query="DELETE FROM comments WHERE id='".$id."'";
	    		//выполнение запроса
	    		mysql_query($query,$this->link);
	    	break;
	    }
	}
	
}
?>